package github.sf.fw.tools.tree;

import java.util.List;

/**
 * 树结构的构建器
 *
 * @see BaseTreeNode
 * @see TreeBuilderProvider
 */
public interface TreeBuilder {
    /**
     * 初始节点，解析基本的前后依赖关系
     * <p></p>
     * 方便后续查找节点的子节点和父节点
     *
     * @param nodes 需要构建树结构的节点
     */
    void initialize(List<Node> nodes);

    /**
     * 构建树
     *
     * @return 根节点
     */
    Node buildTree(List<Node> nodes);

    /**
     * @return 子节点
     */
    List<Node> getChildren(Node node);

    /**
     * 创建TreeNode
     *
     * @return BaseTreeNode
     */
    Node createTreeNode();

    /**
     * 设置TreeNode的具体实现
     *
     * @param treeNodeImpl treeNode的实现
     */
    void setTreeNodeImpl(String treeNodeImpl);
}
